package xyz.xmh.pattern.behavioral.chainofresponsibilitypattern;

/**
 * @author Administrator
 * 责任链模式演示类
 */
public class ChainPatternDemo {

    public static void main(String[] args) {
        AbstractLogger loggerChain = getChainOfLoggers();

        // 不同的错误级别，负责处理的对象不同
        loggerChain.logMessage(AbstractLogger.INFO, "This is an information.");

        loggerChain.logMessage(AbstractLogger.DEBUG, "This is a debug level information.");

        loggerChain.logMessage(AbstractLogger.ERROR, "This is an error information.");

    }

    /**
     * 获取记录器链
     *
     * @return 记录器
     */
    private static AbstractLogger getChainOfLoggers() {
        // 创建不同类型的记录器。赋予它们不同的错误级别，并在每个记录器中设置下一个记录器
        AbstractLogger errorLogger = new ErrorLogger(AbstractLogger.ERROR);
        AbstractLogger fileLogger = new FileLogger(AbstractLogger.DEBUG);
        AbstractLogger consoleLogger = new ConsoleLogger(AbstractLogger.INFO);

        // 每个记录器中的下一个记录器代表的是链的一部分
        errorLogger.setNextLogger(fileLogger);
        fileLogger.setNextLogger(consoleLogger);
        return errorLogger;
    }
}
